import requests
from requests import HTTPError


class Request(object):

    def http_request(self, method, url, **kwargs):
        """
        requests库的异常
        注意requests库有时会产生异常，比如网络连接错误、http错误异常、重定向异常、请求url超时异常等等。所以我们需要判断r.status_codes是否是200，在这里我们怎么样去捕捉异常呢？
        这里我们可以利用r.raise_for_status()
        语句去捕捉异常，该语句在方法内部判断r.status_code是否等于200，如果不等于，则抛出异常。
        于是在这里我们有一个爬取网页的通用代码框架：
        """
        r = requests.request(method, url, **kwargs, timeout=60)  # 请求超时时间为30秒
        r.raise_for_status()  # 如果状态不是200，则引发异常
        r.encoding = r.apparent_encoding  # 配置编码
        return r

    def get_request(self, url, **kwargs):
        return self.http_request('get', url, **kwargs)

    def get_html_text(self, url, **kwargs):
        return self.get_request(url, **kwargs).text

    def get_json(self, url, **kwargs):
        return self.get_request(url, **kwargs).json()

    def post_request(self, url, **kwargs):
        return self.http_request('post', url, **kwargs)

    def post_html_text(self, url, **kwargs):
        return self.post_request(url, **kwargs).text

    def post_json(self, url, **kwargs):
        return self.post_request(url, **kwargs).json()